package cn.le.monitor;

import cn.le.Tool;
import net.contentobjects.jnotify.JNotify;
import net.contentobjects.jnotify.JNotifyAdapter;


public class EnhancedJNotifyAdapter  extends JNotifyAdapter{

	//关注的事件
	int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;
	//是否监视子目录,及级联监视
	boolean watchSubtree = true;
	//监听程序id
	public int watchId;

	/**
	 * 容器启动时,启动监视程序
	 */
	public void beginWatch()
	{
		//添加到监视队列
		try {
			this.watchId = JNotify.addWatch(Tool.load("monitorPath"), mask, watchSubtree, this);
			System.out.println("-----------------初始化完成------------");
		} catch (Exception e) {
			e.printStackTrace();
		}
		/*
		 * 死循环,线程一直执行,休眠一分钟后继续执行,主要是为了让主线程一直执行
		 * 休眠时间和监测文件发生的效率无关(就是说不是监视目录文件改变一分钟后才监测到,监测几乎是实时的
		 * 调用本地系统库)
		 */
		while(true)
		{
			try {
				Thread.sleep(60000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * 当监听目录下一旦有新的文件被创建,测即触发该事件
	 * wd:监控线程id
	 * rootPath:监听目录
	 * name:文件名称
	 */
	public void fileCreated(int wd,String rootPath,String name)
	{
		FileOut.addFile(null, name,false);
	}
	/**
	 * 重命名事件
	 */
	public void fileRenamed(int wd, String rootPath, String oldName, String newName)
	{
		FileOut.addFile(oldName, newName,false);
	}
	/**
	 * 修改事件
	 */
	public void fileModified(int wd, String rootPath, String name)
	{
		FileOut.addFile( null, name,false);
	}
	/**
	 * 删除事件
	 */
	public void fileDeleted(int wd, String rootPath, String name) {
		FileOut.addFile(null, name,true);
	}
}





